#include<iostream>
#include<cstdio>
#include<unistd.h>
#include<sys/wait.h>
int main()
{
    //父创建管道
    int pipefd[2]={0};
    int n=pipe(pipefd);
    (void)n;//防止编译器有告警
    //fork创建子进程
    pid_t id=fork();
    if(id<0)
    {
        perror("fork");
        exit(1);
    }
    //父子进程关闭不需要的fd
    else if(id==0)
    {
        //子进程关闭读
        close(pipefd[0]);

        std::string str="我是子进程";
        std::string self=std::to_string(getpid());
        int cnt=1;
        std::string message=str+","+self+",";
        while(true)
        {
            message+=std::to_string(cnt++);
            write(pipefd[1],message.c_str(),message.size());//写入不需要加\0，因为
            sleep(1);
        }  
    }
    else{
        //父进程关闭读
        close(pipefd[1]);

        while(true)
        {
            char inbuffer[1024]={0};
            ssize_t n=read(pipefd[0],inbuffer,sizeof(inbuffer)-1);
            if(n>0)
            {
                //读到了
                inbuffer[n]=0;//设置\0（n为最后一个字符的下一个位置）
                //如果不设置斜杠0，在没有内容的地方，会打印出乱码
                std::cout<<"读取内容："<<inbuffer<<std::endl;
            }
        }
        pid_t rid=waitpid(id,nullptr,0);
        (void)rid;
    }
    return 0;
}


 